#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "processaFrase.h"

/* Função para calcular o tempo de execução */
double tempo()
{
    struct timeval tv;
    gettimeofday(&tv,0);
    return tv.tv_sec + tv.tv_usec/1e6;
}


int main(void){
  /* Ponteiro para o arquivo */
  FILE *fp;
  
  /* Variáveis para frase e palavra */
  char buffer[TAM_FRASE], palavra[TAM_PALAVRA];
  /* Variável para percorer as letras da frase */
  int percorre_frase;
  
  /* Offset do final do arquivo, para leitura */
  long posEnd;
  
  /* Variáveis para fazer contagem de palíndromos em frases e palavras */
  int w_palindromos = 0, p_palindromos = 0;

  /* Variáveis para registrar o tempo de início e término de execução */
  double start, end;

  /* Registra o tempo de início */
  start = tempo();
  
  fp = fopen("shakespe.are", "r");
  if(fp < 0){
    printf("O arquivo necessario não foi encontrado\n");
    exit(-1);
  }
  
  /*Vou para o final do arquivo para pegar a posicao final */
  fseek(fp, 0, SEEK_END);
  posEnd = ftell(fp);
  
  /*Volto para a posicao inicial*/
  fseek(fp, 0, SEEK_SET);

  while(1){
    /* Pega uma frase */
    get_frase(fp, buffer);
    
    /*Verifica se esta na posicao final ou ja passou */
    if(ftell(fp) >= posEnd) break;
    
    /* Verifica o palíndromo na frase */
    verifica_palindromo(buffer, &p_palindromos);

    /* Verifica palíndromo em palavras */
    percorre_frase = 0;
    while(percorre_frase < strlen(buffer)){
      percorre_frase = get_palavras(buffer, palavra, percorre_frase);
      if(strlen(palavra) > 1){
	verifica_palindromo(palavra, &w_palindromos);
      }
    }
    
  }
  
  /* Registra o tempo de fim */
  end = tempo();
  
  /* Imprime resultados */
  printf("Numero total de frases que são palíndromos = %d.\n", p_palindromos);
  printf("Numero total palavras que são palíndromos = %d.\n", w_palindromos);
  printf("Tempo de execucao = %f segundos\n", end-start);

  /*Fecha os arquivos de entrada e saida*/
  fclose(fp);
  return 0;
}
